[INFO] cloning repository https://github.com/gitxandert/audio_decoder
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/gitxandert/audio_decoder" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgitxandert%2Faudio_decoder", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgitxandert%2Faudio_decoder'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 4602224a3ebb759672df3799ba66a73bfa5b67b6
[INFO] fixing gitxandert/audio_decoder against try#622891a4e29178280638a6b63a8908bde2c0c854+cargoflags=-Zfix-edition=start=2015 for pr-157817-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgitxandert%2Faudio_decoder" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/gitxandert/audio_decoder
[INFO] finished tweaking git repo https://github.com/gitxandert/audio_decoder
[INFO] tweaked toml for git repo https://github.com/gitxandert/audio_decoder written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/gitxandert/audio_decoder on toolchain 622891a4e29178280638a6b63a8908bde2c0c854
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/gitxandert/audio_decoder already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: virtual workspace defaulting to `resolver = "1"` despite one or more workspace members being on edition 2024 which implies `resolver = "3"`
[INFO] [stderr]   |
[INFO] [stderr]   = note: to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest
[INFO] [stderr]   = note: to use the edition 2024 resolver, specify `workspace.resolver = "3"` in the workspace root's manifest
[INFO] [stderr]   = note: for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded quote v1.0.42
[INFO] [stderr]   Downloaded alsa-sys v0.3.1
[INFO] [stderr]   Downloaded proc-macro2 v1.0.103
[INFO] [stderr]   Downloaded syn v2.0.111
[INFO] [stderr]   Downloaded libc v0.2.178
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3a6becf2bc8dde7f3fa57ede90e4f284e72d296796fc446bbb1e2c7cc0530151" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00
[INFO] running `Command { std: "docker" "start" "806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=" "-e" "RUSTDOCFLAGS=" "-w" "/opt/rustwide/workdir" "--user" "0:0" "806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fix" "--allow-no-vcs" "--allow-dirty" "--frozen" "--all" "--all-targets" "--message-format=json" "-Zfix-edition=start=2015", kill_on_drop: false }`
[INFO] [stderr] warning: virtual workspace defaulting to `resolver = "1"` despite one or more workspace members being on edition 2024 which implies `resolver = "3"`
[INFO] [stderr]   |
[INFO] [stderr]   = note: to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest
[INFO] [stderr]   = note: to use the edition 2024 resolver, specify `workspace.resolver = "3"` in the workspace root's manifest
[INFO] [stderr]   = note: for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling quote v1.0.42
[INFO] [stderr]    Compiling unicode-ident v1.0.22
[INFO] [stderr]    Compiling pkg-config v0.3.32
[INFO] [stderr]    Compiling libc v0.2.178
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]     Checking syn v2.0.111
[INFO] [stderr]     Checking blast_macros v0.1.0 (/opt/rustwide/workdir/blast_macros)
[INFO] [stderr]     Checking blast v0.1.0 (/opt/rustwide/workdir/blast)
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]   --> blast/src/audio_processing/commands.rs:25:18
[INFO] [stdout]    |
[INFO] [stdout] 25 |         for _ in {0..cap} {
[INFO] [stdout]    |                  ^      ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_braces)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these braces
[INFO] [stdout]    |
[INFO] [stdout] 25 -         for _ in {0..cap} {
[INFO] [stdout] 25 +         for _ in 0..cap  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:990:30
[INFO] [stdout]     |
[INFO] [stdout] 990 |                     for i in {0..len} {
[INFO] [stdout]     |                              ^      ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]     |
[INFO] [stdout] 990 -                     for i in {0..len} {
[INFO] [stdout] 990 +                     for i in 0..len  {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1019:54
[INFO] [stdout]      |
[INFO] [stdout] 1019 | ...                   for i in {0..chance.len()} {
[INFO] [stdout]      |                                ^               ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]      |
[INFO] [stdout] 1019 -                                             for i in {0..chance.len()} {
[INFO] [stdout] 1019 +                                             for i in 0..chance.len()  {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1032:50
[INFO] [stdout]      |
[INFO] [stdout] 1032 | ...                   for i in {0..steps.len()} {
[INFO] [stdout]      |                                ^              ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]      |
[INFO] [stdout] 1032 -                                         for i in {0..steps.len()} {
[INFO] [stdout] 1032 +                                         for i in 0..steps.len()  {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1102:52
[INFO] [stdout]      |
[INFO] [stdout] 1102 | ...                   for idx in {0..steps.len()} {
[INFO] [stdout]      |                                  ^              ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]      |
[INFO] [stdout] 1102 -                                         for idx in {0..steps.len()} {
[INFO] [stdout] 1102 +                                         for idx in 0..steps.len()  {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `hash_map::Entry`
[INFO] [stdout]  --> blast/src/audio_processing/engine.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 |     collections::{HashMap, hash_map::Entry},
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DecodeError` and `DecodeResult`
[INFO] [stdout]  --> blast/src/audio_processing/engine.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 |     DecodeResult, DecodeError, AudioFile,
[INFO] [stdout]   |     ^^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TempoUnit`, `X128P`, `fast_seed`, and `sample_rate`
[INFO] [stdout]   --> blast/src/audio_processing/engine.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         X128P, fast_seed
[INFO] [stdout]    |         ^^^^^  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |         sample_rate,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 19 |         blast_time::{
[INFO] [stdout] 20 |             clock, TempoMode, TempoUnit, TempoState
[INFO] [stdout]    |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AtomicBool`
[INFO] [stdout]  --> blast/src/audio_processing/blast_time.rs:1:47
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::atomic::{AtomicU32, AtomicU64, AtomicBool, Ordering};
[INFO] [stdout]   |                                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TempoMode`
[INFO] [stdout]  --> blast/src/audio_processing/processes.rs:7:42
[INFO] [stdout]   |
[INFO] [stdout] 7 |     blast_time::blast_time::{TempoState, TempoMode},
[INFO] [stdout]   |                                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::os::unix::io::AsRawFd`
[INFO] [stdout]  --> blast/src/audio_processing/runtime.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::os::unix::io::AsRawFd;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `STDOUT_FILENO`, `TIOCGWINSZ`, `ioctl`, and `winsize`
[INFO] [stdout]  --> blast/src/audio_processing/runtime.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     ioctl, winsize, STDOUT_FILENO, TIOCGWINSZ,
[INFO] [stdout]   |     ^^^^^  ^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AtomicU32`, `AtomicU64`, `hash_map::Entry`, `mem`, and `self`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     mem,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     io::{self, Read, Write},
[INFO] [stdout]    |          ^^^^
[INFO] [stdout] 16 |     collections::{HashMap, hash_map::Entry},
[INFO] [stdout]    |                            ^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     sync::{Arc, Mutex, 
[INFO] [stdout] 18 |         atomic::{AtomicBool, AtomicU32, AtomicU64, Ordering}
[INFO] [stdout]    |                              ^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Command`, `Voice`, and `blast_time::clock`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:24:25
[INFO] [stdout]    |
[INFO] [stdout] 24 |     engine::{Conductor, Voice},
[INFO] [stdout]    |                         ^^^^^
[INFO] [stdout] 25 |     commands::{
[INFO] [stdout] 26 |         CmdQueue, CmdProcessor, Command, EngineState,
[INFO] [stdout]    |                                 ^^^^^^^
[INFO] [stdout] 27 |     },
[INFO] [stdout] 28 |     blast_time::{blast_time::clock, sample_rate},
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SeekFrom` and `self`
[INFO] [stdout]  --> blast/src/file_parsing/aiff.rs:2:15
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, Read, SeekFrom};
[INFO] [stdout]   |               ^^^^        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AddAssign`, `BitOr`, and `Shl`
[INFO] [stdout]  --> blast/src/file_parsing/aiff.rs:3:16
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::ops::{Shl, BitOr, AddAssign};
[INFO] [stdout]   |                ^^^  ^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SeekFrom`
[INFO] [stdout]  --> blast/src/file_parsing/mpeg.rs:2:27
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, Read, SeekFrom};
[INFO] [stdout]   |                           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AudioFile`
[INFO] [stdout]  --> blast/src/file_parsing/mpeg.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::decode_helpers::{AudioFile, DecodeResult, DecodeError};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:23:28
[INFO] [stdout]    |
[INFO] [stdout] 23 |                     supb = ((reader[cur] as usize) << 24);
[INFO] [stdout]    |                            ^                            ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 23 -                     supb = ((reader[cur] as usize) << 24);
[INFO] [stdout] 23 +                     supb = (reader[cur] as usize) << 24 ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:28:29
[INFO] [stdout]    |
[INFO] [stdout] 28 |                     supb |= ((reader[cur] as usize) << 16);
[INFO] [stdout]    |                             ^                            ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 28 -                     supb |= ((reader[cur] as usize) << 16);
[INFO] [stdout] 28 +                     supb |= (reader[cur] as usize) << 16 ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:33:29
[INFO] [stdout]    |
[INFO] [stdout] 33 |                     supb |= ((reader[cur] as usize) << 8);
[INFO] [stdout]    |                             ^                           ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 33 -                     supb |= ((reader[cur] as usize) << 8);
[INFO] [stdout] 33 +                     supb |= (reader[cur] as usize) << 8 ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SeekFrom` and `self`
[INFO] [stdout]  --> blast/src/file_parsing/wav.rs:2:15
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, Read, SeekFrom};
[INFO] [stdout]   |               ^^^^        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AddAssign`, `BitOr`, and `Shl`
[INFO] [stdout]  --> blast/src/file_parsing/wav.rs:3:16
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::ops::{Shl, BitOr, AddAssign};
[INFO] [stdout]   |                ^^^  ^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `audio_processing::runtime::run_blast`
[INFO] [stdout]  --> blast/src/lib.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use audio_processing::runtime::run_blast;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AudioFile`, `DecodeError`, and `DecodeResult`
[INFO] [stdout]  --> blast/src/lib.rs:5:36
[INFO] [stdout]   |
[INFO] [stdout] 5 | use file_parsing::decode_helpers::{DecodeResult, DecodeError, AudioFile};
[INFO] [stdout]   |                                    ^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `wav` in this scope
[INFO] [stdout]   --> blast/src/lib.rs:16:24
[INFO] [stdout]    |
[INFO] [stdout] 16 |         let af = match wav::parse(path) {
[INFO] [stdout]    |                        ^^^ use of unresolved module or unlinked crate `wav`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `wav`, use `cargo add wav` to add it to your `Cargo.toml`
[INFO] [stdout] help: consider importing this module
[INFO] [stdout]    |
[INFO] [stdout]  9 +     use crate::file_parsing::wav;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `aiff` in this scope
[INFO] [stdout]   --> blast/src/lib.rs:28:24
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let af = match aiff::parse(path) {
[INFO] [stdout]    |                        ^^^^ use of unresolved module or unlinked crate `aiff`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `aiff`, use `cargo add aiff` to add it to your `Cargo.toml`
[INFO] [stdout] help: consider importing this module
[INFO] [stdout]    |
[INFO] [stdout]  9 +     use crate::file_parsing::aiff;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]   --> blast/src/audio_processing/commands.rs:25:18
[INFO] [stdout]    |
[INFO] [stdout] 25 |         for _ in {0..cap} {
[INFO] [stdout]    |                  ^      ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_braces)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these braces
[INFO] [stdout]    |
[INFO] [stdout] 25 -         for _ in {0..cap} {
[INFO] [stdout] 25 +         for _ in 0..cap  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:990:30
[INFO] [stdout]     |
[INFO] [stdout] 990 |                     for i in {0..len} {
[INFO] [stdout]     |                              ^      ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]     |
[INFO] [stdout] 990 -                     for i in {0..len} {
[INFO] [stdout] 990 +                     for i in 0..len  {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1019:54
[INFO] [stdout]      |
[INFO] [stdout] 1019 | ...                   for i in {0..chance.len()} {
[INFO] [stdout]      |                                ^               ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]      |
[INFO] [stdout] 1019 -                                             for i in {0..chance.len()} {
[INFO] [stdout] 1019 +                                             for i in 0..chance.len()  {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1032:50
[INFO] [stdout]      |
[INFO] [stdout] 1032 | ...                   for i in {0..steps.len()} {
[INFO] [stdout]      |                                ^              ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]      |
[INFO] [stdout] 1032 -                                         for i in {0..steps.len()} {
[INFO] [stdout] 1032 +                                         for i in 0..steps.len()  {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary braces around `for` iterator expression
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1102:52
[INFO] [stdout]      |
[INFO] [stdout] 1102 | ...                   for idx in {0..steps.len()} {
[INFO] [stdout]      |                                  ^              ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these braces
[INFO] [stdout]      |
[INFO] [stdout] 1102 -                                         for idx in {0..steps.len()} {
[INFO] [stdout] 1102 +                                         for idx in 0..steps.len()  {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `hash_map::Entry`
[INFO] [stdout]  --> blast/src/audio_processing/engine.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 |     collections::{HashMap, hash_map::Entry},
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DecodeError` and `DecodeResult`
[INFO] [stdout]  --> blast/src/audio_processing/engine.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 |     DecodeResult, DecodeError, AudioFile,
[INFO] [stdout]   |     ^^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TempoUnit`, `X128P`, `fast_seed`, and `sample_rate`
[INFO] [stdout]   --> blast/src/audio_processing/engine.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         X128P, fast_seed
[INFO] [stdout]    |         ^^^^^  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |         sample_rate,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 19 |         blast_time::{
[INFO] [stdout] 20 |             clock, TempoMode, TempoUnit, TempoState
[INFO] [stdout]    |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AtomicBool`
[INFO] [stdout]  --> blast/src/audio_processing/blast_time.rs:1:47
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::atomic::{AtomicU32, AtomicU64, AtomicBool, Ordering};
[INFO] [stdout]   |                                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TempoMode`
[INFO] [stdout]  --> blast/src/audio_processing/processes.rs:7:42
[INFO] [stdout]   |
[INFO] [stdout] 7 |     blast_time::blast_time::{TempoState, TempoMode},
[INFO] [stdout]   |                                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::os::unix::io::AsRawFd`
[INFO] [stdout]  --> blast/src/audio_processing/runtime.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::os::unix::io::AsRawFd;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `STDOUT_FILENO`, `TIOCGWINSZ`, `ioctl`, and `winsize`
[INFO] [stdout]  --> blast/src/audio_processing/runtime.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     ioctl, winsize, STDOUT_FILENO, TIOCGWINSZ,
[INFO] [stdout]   |     ^^^^^  ^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AtomicU32`, `AtomicU64`, `hash_map::Entry`, `mem`, and `self`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     mem,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     io::{self, Read, Write},
[INFO] [stdout]    |          ^^^^
[INFO] [stdout] 16 |     collections::{HashMap, hash_map::Entry},
[INFO] [stdout]    |                            ^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     sync::{Arc, Mutex, 
[INFO] [stdout] 18 |         atomic::{AtomicBool, AtomicU32, AtomicU64, Ordering}
[INFO] [stdout]    |                              ^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Command`, `Voice`, and `blast_time::clock`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:24:25
[INFO] [stdout]    |
[INFO] [stdout] 24 |     engine::{Conductor, Voice},
[INFO] [stdout]    |                         ^^^^^
[INFO] [stdout] 25 |     commands::{
[INFO] [stdout] 26 |         CmdQueue, CmdProcessor, Command, EngineState,
[INFO] [stdout]    |                                 ^^^^^^^
[INFO] [stdout] 27 |     },
[INFO] [stdout] 28 |     blast_time::{blast_time::clock, sample_rate},
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SeekFrom` and `self`
[INFO] [stdout]  --> blast/src/file_parsing/aiff.rs:2:15
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, Read, SeekFrom};
[INFO] [stdout]   |               ^^^^        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AddAssign`, `BitOr`, and `Shl`
[INFO] [stdout]  --> blast/src/file_parsing/aiff.rs:3:16
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::ops::{Shl, BitOr, AddAssign};
[INFO] [stdout]   |                ^^^  ^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SeekFrom`
[INFO] [stdout]  --> blast/src/file_parsing/mpeg.rs:2:27
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, Read, SeekFrom};
[INFO] [stdout]   |                           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AudioFile`
[INFO] [stdout]  --> blast/src/file_parsing/mpeg.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::decode_helpers::{AudioFile, DecodeResult, DecodeError};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:23:28
[INFO] [stdout]    |
[INFO] [stdout] 23 |                     supb = ((reader[cur] as usize) << 24);
[INFO] [stdout]    |                            ^                            ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 23 -                     supb = ((reader[cur] as usize) << 24);
[INFO] [stdout] 23 +                     supb = (reader[cur] as usize) << 24 ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:28:29
[INFO] [stdout]    |
[INFO] [stdout] 28 |                     supb |= ((reader[cur] as usize) << 16);
[INFO] [stdout]    |                             ^                            ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 28 -                     supb |= ((reader[cur] as usize) << 16);
[INFO] [stdout] 28 +                     supb |= (reader[cur] as usize) << 16 ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:33:29
[INFO] [stdout]    |
[INFO] [stdout] 33 |                     supb |= ((reader[cur] as usize) << 8);
[INFO] [stdout]    |                             ^                           ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 33 -                     supb |= ((reader[cur] as usize) << 8);
[INFO] [stdout] 33 +                     supb |= (reader[cur] as usize) << 8 ;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SeekFrom` and `self`
[INFO] [stdout]  --> blast/src/file_parsing/wav.rs:2:15
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, Read, SeekFrom};
[INFO] [stdout]   |               ^^^^        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AddAssign`, `BitOr`, and `Shl`
[INFO] [stdout]  --> blast/src/file_parsing/wav.rs:3:16
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::ops::{Shl, BitOr, AddAssign};
[INFO] [stdout]   |                ^^^  ^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AudioFile`, `DecodeError`, and `DecodeResult`
[INFO] [stdout]  --> blast/src/lib.rs:5:36
[INFO] [stdout]   |
[INFO] [stdout] 5 | use file_parsing::decode_helpers::{DecodeResult, DecodeError, AudioFile};
[INFO] [stdout]   |                                    ^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `voice`
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:380:16
[INFO] [stdout]     |
[INFO] [stdout] 380 |             Ok(voice) => return Err(CmdErr::AlreadyIs { 
[INFO] [stdout]     |                ^^^^^ help: if this is intentional, prefix it with an underscore: `_voice`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:532:17
[INFO] [stdout]     |
[INFO] [stdout] 532 |         for (_, mut voice) in &mut self.engine_state.voices {
[INFO] [stdout]     |                 ----^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:721:25
[INFO] [stdout]     |
[INFO] [stdout] 721 |                 for (_, mut process) in &mut voice.processes {
[INFO] [stdout]     |                         ----^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tc_name`
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:606:37
[INFO] [stdout]     |
[INFO] [stdout] 606 | ...                   let tc_name = t_args
[INFO] [stdout]     |                           ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tc_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:838:13
[INFO] [stdout]     |
[INFO] [stdout] 838 |         let mut rng = X128P::new(fast_seed());
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:969:25
[INFO] [stdout]     |
[INFO] [stdout] 969 |                     let mut spec_char = |s: &str| -> Option<char> {
[INFO] [stdout]     |                         ----^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1221:13
[INFO] [stdout]      |
[INFO] [stdout] 1221 |         let mut args: Vec<&str> = args.split('.').collect();
[INFO] [stdout]      |             ----^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]   --> blast/src/audio_processing/engine.rs:61:21
[INFO] [stdout]    |
[INFO] [stdout] 47 |         unsafe {
[INFO] [stdout]    |         ------ because it's nested under this `unsafe` block
[INFO] [stdout] ...
[INFO] [stdout] 61 |                     unsafe {
[INFO] [stdout]    |                     ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:203:24
[INFO] [stdout]     |
[INFO] [stdout] 203 |                    let mut process = &mut voice.processes[p];
[INFO] [stdout]     |                        ----^^^^^^^
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:386:42
[INFO] [stdout]     |
[INFO] [stdout] 386 |     fn process(&mut self, acc: *mut i16, frame: u64, mut ch: usize) {
[INFO] [stdout]     |                                          ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sample` is never read
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:430:26
[INFO] [stdout]     |
[INFO] [stdout] 430 |         let mut sample = 0f32;
[INFO] [stdout]     |                          ^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 437 |             sample = s0;
[INFO] [stdout]     |             ----------- `sample` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:519:13
[INFO] [stdout]     |
[INFO] [stdout] 519 |         for mut voice in &mut self.voices {
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:530:54
[INFO] [stdout]     |
[INFO] [stdout] 530 |     fn process(&mut self, acc: *mut i16, frame: u64, mut ch: usize) {
[INFO] [stdout]     |                                                      ----^^
[INFO] [stdout]     |                                                      |
[INFO] [stdout]     |                                                      help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:150:29
[INFO] [stdout]     |
[INFO] [stdout] 150 |                         let mut cmd = buf.clone();
[INFO] [stdout]     |                             ----^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut engine_state = EngineState::new(tracks_for_state, num_channels as usize);
[INFO] [stdout]    |         ----^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut width = 80usize;
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut height = 40usize;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:54:13
[INFO] [stdout]    |
[INFO] [stdout] 54 |         let mut divider = width / 3;
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:330:17
[INFO] [stdout]     |
[INFO] [stdout] 330 |             let mut avail = snd_pcm_avail_update(handle) as i32;
[INFO] [stdout]     |                 ----^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sr`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:50:13
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let sr = sample_rate.clone();
[INFO] [stdout]    |             ^^ help: if this is intentional, prefix it with an underscore: `_sr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut height = 40usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `divider`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:54:13
[INFO] [stdout]    |
[INFO] [stdout] 54 |         let mut divider = width / 3;
[INFO] [stdout]    |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_divider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `voice`
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:380:16
[INFO] [stdout]     |
[INFO] [stdout] 380 |             Ok(voice) => return Err(CmdErr::AlreadyIs { 
[INFO] [stdout]     |                ^^^^^ help: if this is intentional, prefix it with an underscore: `_voice`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:532:17
[INFO] [stdout]     |
[INFO] [stdout] 532 |         for (_, mut voice) in &mut self.engine_state.voices {
[INFO] [stdout]     |                 ----^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:391:19
[INFO] [stdout]     |
[INFO] [stdout] 391 |         let msg = std::ffi::CStr::from_ptr(snd_strerror(code));
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:389:1
[INFO] [stdout]     |
[INFO] [stdout] 389 | unsafe fn check_code(code: c_int, ctx: &str) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `alsa_sys::snd_strerror` is unsafe and requires unsafe block
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:391:44
[INFO] [stdout]     |
[INFO] [stdout] 391 |         let msg = std::ffi::CStr::from_ptr(snd_strerror(code));
[INFO] [stdout]     |                                            ^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:721:25
[INFO] [stdout]     |
[INFO] [stdout] 721 |                 for (_, mut process) in &mut voice.processes {
[INFO] [stdout]     |                         ----^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/blast_rand.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut range: u64 = match upper > lower {
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tc_name`
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:606:37
[INFO] [stdout]     |
[INFO] [stdout] 606 | ...                   let tc_name = t_args
[INFO] [stdout]     |                           ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tc_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `assets`
[INFO] [stdout]    --> blast/src/file_parsing/aiff.rs:175:23
[INFO] [stdout]     |
[INFO] [stdout] 175 |                 Some((assets, name)) => name,
[INFO] [stdout]     |                       ^^^^^^ help: if this is intentional, prefix it with an underscore: `_assets`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 |         if let b = reader[cur] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]    = help: consider replacing the `if let` with a `let`
[INFO] [stdout]    = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `indices`
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:64:23
[INFO] [stdout]    |
[INFO] [stdout] 64 |         let (pos_ref, indices) = vecs[i];
[INFO] [stdout]    |                       ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_indices`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `supb` is never read
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:22:43
[INFO] [stdout]    |
[INFO] [stdout] 22 |                     let mut supb: usize = 0;
[INFO] [stdout]    |                                           ^ this value is reassigned later and never used
[INFO] [stdout] 23 |                     supb = ((reader[cur] as usize) << 24);
[INFO] [stdout]    |                     ------------------------------------- `supb` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `refheader` is never read
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:61:33
[INFO] [stdout]    |
[INFO] [stdout] 61 |     let mut refheader: Header = Header::new(); 
[INFO] [stdout]    |                                 ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 67 |                 refheader = Header::format(v, l, p, br, sr, pd, cm);
[INFO] [stdout]    |                 --------------------------------------------------- `refheader` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:838:13
[INFO] [stdout]     |
[INFO] [stdout] 838 |         let mut rng = X128P::new(fast_seed());
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:969:25
[INFO] [stdout]     |
[INFO] [stdout] 969 |                     let mut spec_char = |s: &str| -> Option<char> {
[INFO] [stdout]     |                         ----^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1221:13
[INFO] [stdout]      |
[INFO] [stdout] 1221 |         let mut args: Vec<&str> = args.split('.').collect();
[INFO] [stdout]      |             ----^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable `else` clause
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:370:41
[INFO] [stdout]     |
[INFO] [stdout] 370 |     let AAAB_BCCD = (bytes >> 16) as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |     ----------------------------------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     assigning to binding pattern will always succeed
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern always matches, so the else clause is unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable `else` clause
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:428:40
[INFO] [stdout]     |
[INFO] [stdout] 428 |     let EEEE_FFGH = (bytes >> 8) as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |     ---------------------------------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     assigning to binding pattern will always succeed
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern always matches, so the else clause is unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable `else` clause
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:466:34
[INFO] [stdout]     |
[INFO] [stdout] 466 |     let IIJJ_KLMM = *bytes as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |     ---------------------------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     assigning to binding pattern will always succeed
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern always matches, so the else clause is unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:435:9
[INFO] [stdout]     |
[INFO] [stdout] 435 |     let mut bitrate: u32;
[INFO] [stdout]     |         ----^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `c`
[INFO] [stdout]   --> blast/src/file_parsing/wav.rs:34:13
[INFO] [stdout]    |
[INFO] [stdout] 34 |         let c = match vec.get(i) {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_c`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]   --> blast/src/audio_processing/engine.rs:61:21
[INFO] [stdout]    |
[INFO] [stdout] 47 |         unsafe {
[INFO] [stdout]    |         ------ because it's nested under this `unsafe` block
[INFO] [stdout] ...
[INFO] [stdout] 61 |                     unsafe {
[INFO] [stdout]    |                     ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:203:24
[INFO] [stdout]     |
[INFO] [stdout] 203 |                    let mut process = &mut voice.processes[p];
[INFO] [stdout]     |                        ----^^^^^^^
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `riff_size`
[INFO] [stdout]   --> blast/src/file_parsing/wav.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 85 |     let riff_size: u32 = parse_bytes(&mut reader, &mut start, &mut end, 4)?;
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_riff_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fmt_tag`
[INFO] [stdout]   --> blast/src/file_parsing/wav.rs:95:14
[INFO] [stdout]    |
[INFO] [stdout] 95 |     let Some(fmt_tag) = FormatCode::from_u16(parse_bytes(&mut reader, &mut start, &mut end, 2)?.try_into().unwrap())
[INFO] [stdout]    |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fmt_tag`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data_rate`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:104:9
[INFO] [stdout]     |
[INFO] [stdout] 104 |     let data_rate: u32 = parse_bytes(&mut reader, &mut start, &mut end, 4)?;
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_data_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data_blk_sz`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:106:9
[INFO] [stdout]     |
[INFO] [stdout] 106 |     let data_blk_sz: u32 = parse_bytes(&mut reader, &mut start, &mut end, 2)?;
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_data_blk_sz`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `valid_bits`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:116:17
[INFO] [stdout]     |
[INFO] [stdout] 116 |             let valid_bits: u32 = parse_bytes(&mut reader, &mut start, &mut end, 2)?;
[INFO] [stdout]     |                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_valid_bits`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dw_channel_mask`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:118:17
[INFO] [stdout]     |
[INFO] [stdout] 118 |             let dw_channel_mask: u32 = parse_bytes(&mut reader, &mut start, &mut end, 4)?;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dw_channel_mask`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `old_fmt`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:120:17
[INFO] [stdout]     |
[INFO] [stdout] 120 |             let old_fmt: u32 = parse_bytes(&mut reader, &mut start, &mut end, 2)?;
[INFO] [stdout]     |                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_old_fmt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `assets`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:159:23
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Some((assets, name)) => name,
[INFO] [stdout]     |                       ^^^^^^ help: if this is intentional, prefix it with an underscore: `_assets`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `owner_idx` is never read
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:262:5
[INFO] [stdout]     |
[INFO] [stdout] 254 | pub struct ProcRepr {
[INFO] [stdout]     |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 262 |     owner_idx: Idx, // index of the Process's $owner
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `out_channels` is never read
[INFO] [stdout]    --> blast/src/audio_processing/commands.rs:292:5
[INFO] [stdout]     |
[INFO] [stdout] 287 | pub struct EngineState {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 292 |     out_channels: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `TempoFormatting`, `InvalidArg`, `AlreadyIs`, and `NoCmd` are never constructed
[INFO] [stdout]     --> blast/src/audio_processing/commands.rs:1327:5
[INFO] [stdout]      |
[INFO] [stdout] 1306 |         enum StateErr {
[INFO] [stdout]      |              -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 1327 |     TempoFormatting {},
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1330 |     InvalidArg { arg: String, cmd: String },
[INFO] [stdout]      |     ^^^^^^^^^^
[INFO] [stdout] 1331 |     AlreadyIs { ty: String, name: String },
[INFO] [stdout]      |     ^^^^^^^^^
[INFO] [stdout] 1332 |     NoCmd { cmd: String },
[INFO] [stdout]      |     ^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: `StateErr` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]      = note: this warning originates in the macro `cmd_errors` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:290:5
[INFO] [stdout]     |
[INFO] [stdout] 288 | pub struct Voice {
[INFO] [stdout]     |            ----- field in this struct
[INFO] [stdout] 289 |     samples: Vec<i16>,
[INFO] [stdout] 290 |     sample_rate: u32,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `skiparound` is never used
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:305:4
[INFO] [stdout]     |
[INFO] [stdout] 305 | fn skiparound(reader: &mut Vec<u8>, cur: &mut usize) {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:386:42
[INFO] [stdout]     |
[INFO] [stdout] 386 |     fn process(&mut self, acc: *mut i16, frame: u64, mut ch: usize) {
[INFO] [stdout]     |                                          ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: comparison is useless due to type limits
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:408:32
[INFO] [stdout]     |
[INFO] [stdout] 408 |         if idx >= state.end || idx < 0 {
[INFO] [stdout]     |                                ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `sample` is never read
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:430:26
[INFO] [stdout]     |
[INFO] [stdout] 430 |         let mut sample = 0f32;
[INFO] [stdout]     |                          ^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 437 |             sample = s0;
[INFO] [stdout]     |             ----------- `sample` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: direct cast of function item into an integer
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:408:42
[INFO] [stdout]     |
[INFO] [stdout] 408 |         sa.sa_sigaction = handle_sigterm as usize;
[INFO] [stdout]     |                                          ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(function_casts_as_integer)]` on by default
[INFO] [stdout] help: first cast to a pointer `as *const ()`
[INFO] [stdout]     |
[INFO] [stdout] 408 |         sa.sa_sigaction = handle_sigterm as *const () as usize;
[INFO] [stdout]     |                                          ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:519:13
[INFO] [stdout]     |
[INFO] [stdout] 519 |         for mut voice in &mut self.voices {
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `CRC` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:222:13
[INFO] [stdout]     |
[INFO] [stdout] 222 |         let CRC = match protected {
[INFO] [stdout]     |             ^^^ help: convert the identifier to snake case: `crc`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/engine.rs:530:54
[INFO] [stdout]     |
[INFO] [stdout] 530 |     fn process(&mut self, acc: *mut i16, frame: u64, mut ch: usize) {
[INFO] [stdout]     |                                                      ----^^
[INFO] [stdout]     |                                                      |
[INFO] [stdout]     |                                                      help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:273:27
[INFO] [stdout]     |
[INFO] [stdout] 273 | fn match_bitrate(row: u8, V: &u8, L: &u8) -> u32 {
[INFO] [stdout]     |                           ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `L` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:273:35
[INFO] [stdout]     |
[INFO] [stdout] 273 | fn match_bitrate(row: u8, V: &u8, L: &u8) -> u32 {
[INFO] [stdout]     |                                   ^ help: convert the identifier to snake case: `l`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `VL` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:274:9
[INFO] [stdout]     |
[INFO] [stdout] 274 |     let VL = (V << 2) & L;
[INFO] [stdout]     |         ^^ help: convert the identifier to snake case: `vl`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `FFGH` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:286:13
[INFO] [stdout]     |
[INFO] [stdout] 286 | fn match_sr(FFGH: &u8, v_id: &u8) -> f64 {
[INFO] [stdout]     |             ^^^^ help: convert the identifier to snake case: `ffgh`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `FF` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:294:9
[INFO] [stdout]     |
[INFO] [stdout] 294 |     let FF = FFGH >> 2;
[INFO] [stdout]     |         ^^ help: convert the identifier to snake case (notice the capitalization): `ff`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `AAAB_BCCD` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:370:9
[INFO] [stdout]     |
[INFO] [stdout] 370 |     let AAAB_BCCD = (bytes >> 16) as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |         ^^^^^^^^^ help: convert the identifier to snake case: `aaab_bccd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `AAAB` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:377:9
[INFO] [stdout]     |
[INFO] [stdout] 377 |     let AAAB = AAAB_BCCD >> 4;
[INFO] [stdout]     |         ^^^^ help: convert the identifier to snake case: `aaab`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `BCCD` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:382:9
[INFO] [stdout]     |
[INFO] [stdout] 382 |     let BCCD = AAAB_BCCD & 0x0F;
[INFO] [stdout]     |         ^^^^ help: convert the identifier to snake case: `bccd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `EEEE_FFGH` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:428:9
[INFO] [stdout]     |
[INFO] [stdout] 428 |     let EEEE_FFGH = (bytes >> 8) as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |         ^^^^^^^^^ help: convert the identifier to snake case: `eeee_ffgh`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `EEEE` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:434:9
[INFO] [stdout]     |
[INFO] [stdout] 434 |     let EEEE = EEEE_FFGH >> 4;
[INFO] [stdout]     |         ^^^^ help: convert the identifier to snake case: `eeee`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `FFGH` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:446:9
[INFO] [stdout]     |
[INFO] [stdout] 446 |     let FFGH = EEEE_FFGH & 0x0F;
[INFO] [stdout]     |         ^^^^ help: convert the identifier to snake case: `ffgh`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `IIJJ_KLMM` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:466:9
[INFO] [stdout]     |
[INFO] [stdout] 466 |     let IIJJ_KLMM = *bytes as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |         ^^^^^^^^^ help: convert the identifier to snake case: `iijj_klmm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `IIJJ` should have a snake case name
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:469:9
[INFO] [stdout]     |
[INFO] [stdout] 469 |     let IIJJ = IIJJ_KLMM >> 4;
[INFO] [stdout]     |         ^^^^ help: convert the identifier to snake case: `iijj`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:150:29
[INFO] [stdout]     |
[INFO] [stdout] 150 |                         let mut cmd = buf.clone();
[INFO] [stdout]     |                             ----^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut engine_state = EngineState::new(tracks_for_state, num_channels as usize);
[INFO] [stdout]    |         ----^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut width = 80usize;
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut height = 40usize;
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:54:13
[INFO] [stdout]    |
[INFO] [stdout] 54 |         let mut divider = width / 3;
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:330:17
[INFO] [stdout]     |
[INFO] [stdout] 330 |             let mut avail = snd_pcm_avail_update(handle) as i32;
[INFO] [stdout]     |                 ----^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sr`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:50:13
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let sr = sample_rate.clone();
[INFO] [stdout]    |             ^^ help: if this is intentional, prefix it with an underscore: `_sr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut height = 40usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `divider`
[INFO] [stdout]   --> blast/src/audio_processing/runtime.rs:54:13
[INFO] [stdout]    |
[INFO] [stdout] 54 |         let mut divider = width / 3;
[INFO] [stdout]    |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_divider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `std::ffi::CStr::from_ptr` is unsafe and requires unsafe block
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:391:19
[INFO] [stdout]     |
[INFO] [stdout] 391 |         let msg = std::ffi::CStr::from_ptr(snd_strerror(code));
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:389:1
[INFO] [stdout]     |
[INFO] [stdout] 389 | unsafe fn check_code(code: c_int, ctx: &str) {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `alsa_sys::snd_strerror` is unsafe and requires unsafe block
[INFO] [stdout]    --> blast/src/audio_processing/runtime.rs:391:44
[INFO] [stdout]     |
[INFO] [stdout] 391 |         let msg = std::ffi::CStr::from_ptr(snd_strerror(code));
[INFO] [stdout]     |                                            ^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> blast/src/audio_processing/blast_rand.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut range: u64 = match upper > lower {
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `assets`
[INFO] [stdout]    --> blast/src/file_parsing/aiff.rs:175:23
[INFO] [stdout]     |
[INFO] [stdout] 175 |                 Some((assets, name)) => name,
[INFO] [stdout]     |                       ^^^^^^ help: if this is intentional, prefix it with an underscore: `_assets`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 |         if let b = reader[cur] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]    = help: consider replacing the `if let` with a `let`
[INFO] [stdout]    = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `indices`
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:64:23
[INFO] [stdout]    |
[INFO] [stdout] 64 |         let (pos_ref, indices) = vecs[i];
[INFO] [stdout]    |                       ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_indices`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `supb` is never read
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:22:43
[INFO] [stdout]    |
[INFO] [stdout] 22 |                     let mut supb: usize = 0;
[INFO] [stdout]    |                                           ^ this value is reassigned later and never used
[INFO] [stdout] 23 |                     supb = ((reader[cur] as usize) << 24);
[INFO] [stdout]    |                     ------------------------------------- `supb` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `refheader` is never read
[INFO] [stdout]   --> blast/src/file_parsing/mpeg.rs:61:33
[INFO] [stdout]    |
[INFO] [stdout] 61 |     let mut refheader: Header = Header::new(); 
[INFO] [stdout]    |                                 ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 67 |                 refheader = Header::format(v, l, p, br, sr, pd, cm);
[INFO] [stdout]    |                 --------------------------------------------------- `refheader` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable `else` clause
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:370:41
[INFO] [stdout]     |
[INFO] [stdout] 370 |     let AAAB_BCCD = (bytes >> 16) as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |     ----------------------------------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     assigning to binding pattern will always succeed
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern always matches, so the else clause is unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable `else` clause
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:428:40
[INFO] [stdout]     |
[INFO] [stdout] 428 |     let EEEE_FFGH = (bytes >> 8) as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |     ---------------------------------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     assigning to binding pattern will always succeed
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern always matches, so the else clause is unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable `else` clause
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:466:34
[INFO] [stdout]     |
[INFO] [stdout] 466 |     let IIJJ_KLMM = *bytes as u8 else { return Err(unex_eof) };
[INFO] [stdout]     |     ---------------------------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     assigning to binding pattern will always succeed
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern always matches, so the else clause is unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> blast/src/file_parsing/mpeg.rs:435:9
[INFO] [stdout]     |
[INFO] [stdout] 435 |     let mut bitrate: u32;
[INFO] [stdout]     |         ----^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `c`
[INFO] [stdout]   --> blast/src/file_parsing/wav.rs:34:13
[INFO] [stdout]    |
[INFO] [stdout] 34 |         let c = match vec.get(i) {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_c`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `riff_size`
[INFO] [stdout]   --> blast/src/file_parsing/wav.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 85 |     let riff_size: u32 = parse_bytes(&mut reader, &mut start, &mut end, 4)?;
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_riff_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fmt_tag`
[INFO] [stdout]   --> blast/src/file_parsing/wav.rs:95:14
[INFO] [stdout]    |
[INFO] [stdout] 95 |     let Some(fmt_tag) = FormatCode::from_u16(parse_bytes(&mut reader, &mut start, &mut end, 2)?.try_into().unwrap())
[INFO] [stdout]    |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fmt_tag`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data_rate`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:104:9
[INFO] [stdout]     |
[INFO] [stdout] 104 |     let data_rate: u32 = parse_bytes(&mut reader, &mut start, &mut end, 4)?;
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_data_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data_blk_sz`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:106:9
[INFO] [stdout]     |
[INFO] [stdout] 106 |     let data_blk_sz: u32 = parse_bytes(&mut reader, &mut start, &mut end, 2)?;
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_data_blk_sz`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `valid_bits`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:116:17
[INFO] [stdout]     |
[INFO] [stdout] 116 |             let valid_bits: u32 = parse_bytes(&mut reader, &mut start, &mut end, 2)?;
[INFO] [stdout]     |                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_valid_bits`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dw_channel_mask`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:118:17
[INFO] [stdout]     |
[INFO] [stdout] 118 |             let dw_channel_mask: u32 = parse_bytes(&mut reader, &mut start, &mut end, 4)?;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dw_channel_mask`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `old_fmt`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:120:17
[INFO] [stdout]     |
[INFO] [stdout] 120 |             let old_fmt: u32 = parse_bytes(&mut reader, &mut start, &mut end, 2)?;
[INFO] [stdout]     |                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_old_fmt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `assets`
[INFO] [stdout]    --> blast/src/file_parsing/wav.rs:159:23
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Some((assets, name)) => name,
[INFO] [stdout]     |                       ^^^^^^ help: if this is intentional, prefix it with an underscore: `_assets`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0133, E0433.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `blast` (lib test) due to 2 previous errors; 67 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unused imports: `DecodeError` and `mpeg`
[INFO] [stdout]  --> blast/src/main.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 |         mpeg, aiff, wav,
[INFO] [stdout]   |         ^^^^
[INFO] [stdout] 6 |         decode_helpers::{
[INFO] [stdout] 7 |             DecodeError, DecodeResult, AudioFile
[INFO] [stdout]   |             ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> blast/src/main.rs:94:19
[INFO] [stdout]    |
[INFO] [stdout] 94 |         let (key, val) = match rates.get(0) {
[INFO] [stdout]    |                   ^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DecodeError` and `mpeg`
[INFO] [stdout]  --> blast/src/main.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 |         mpeg, aiff, wav,
[INFO] [stdout]   |         ^^^^
[INFO] [stdout] 6 |         decode_helpers::{
[INFO] [stdout] 7 |             DecodeError, DecodeResult, AudioFile
[INFO] [stdout]   |             ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> blast/src/main.rs:94:19
[INFO] [stdout]    |
[INFO] [stdout] 94 |         let (key, val) = match rates.get(0) {
[INFO] [stdout]    |                   ^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00", kill_on_drop: false }`
[INFO] [stdout] 806a20e36dd86efd75122cb1fa7086e546cf33d50b53e3dad142b4c11432ec00
